
import router from "@/router";

const myStorage = (function() {
    function setItem(params) { // 存入localStorage方法
        // 存入的参数
        const obj = {
            name: '', // 存入的名字
            value: '', // 存入的值
            expires: '', // 过期时间
            startTime: new Date().getTime() // 存入的时间
        }
        const options = {} // 将obj 和传进来的params 合并  放到options里面 实现js中浅拷贝
        Object.assign(options, obj, params)

        // 判断用户是否设置了过期时间
        if (options.expires) {
            //  以options.name为key,    options为值放进去
            console.log('setItem:' + JSON.stringify(options))
            localStorage.setItem(options.name, JSON.stringify(options))
        }
        // else {
        //     // 如果 options.expires 没有设置的话， 就判断一下value的类型
        //     // 注意localStorage 只能存储字符串 像是数组和对象要转换下
        //     // 如果是数组或者对象
        //     const type = Object.prototype.toString.call(options.value)
        //     if (type === '[object Object]' || type === '[object Array]') {
        //         options.value = JSON.stringify(options.value)
        //     }
        //     localStorage.setItem(options.name, options.value)
        // }
        //
    }
    // 获取数值
    function getItem(name) {
        let item = localStorage.getItem(name)
        // 判断 item 是否存在
        if (item !=null && item !== 'null' ) {
            // 先将取到的对象 看能转换成object 对象格式，不能就说明不是json字符串形式
            try {
                item = JSON.parse(item)
            } catch (error) {
                // eslint-disable-next-line no-self-assign
                item = item
                // console.log(error)
            }
            // 如果有expires的值,说明设置了失效时间
            if (item.expires) {
                // 获取当前时间
                const now = new Date().getTime()
                // 当前的时间和存入时候的时间 进行相减 和过期时间进行比较
                // 大于就说明过期了 清除存储  小于或者等于 就没有过期
                console.log('时间差: '+ (now - item.startTime) )
                if (now - item.startTime > item.expires) {
                    console.log('缓存过期了')
                    // this.$message({type:'info',message: '您的登录已过期,请重新登录'})
                    localStorage.removeItem(name)
                    return false // 返回一个状态值
                } else {
                    // 缓存未过期，返回值
                    return item.value
                }
            } else {
                // 没有设置过期时间，直接返回值
                return item
            }
        } else {
            return false // 如果item 值为undefined 则说明没有存储 返回false
        }
    }

    // 移除指定的缓存
    function removeItem(name) {
        localStorage.removeItem(name)
    }
    // 移除所有的存储数据
    function clear() {
        localStorage.clear()
    }
    return { // 返回 执行接口
        setItem,
        getItem,
        removeItem,
        clear
    }
})()
export default myStorage // 暴露方法

